Contexte de l’étude

Cette étude s’inscrit dans le cadre de l’implémentation des performances des modèles SVM (Machines à vecteurs de support) dans le cadre de la détection de fraude sur les cartes de crédit.
Pour ce faire, nous disposons d’une base de données disponibe sur le site Kaggle.
Cette base contient 284 807 transactions.

I) Visualisation et transformation des données

1) Visualisation de la base de données

Voici un extrait de la base :

Proportion de de la variable d’interet “Class” dans la base de données

0 : cas de non fraude, 1 : Cas de fraude


          0           1 
0.998272514 0.001727486 

On remarque un déséquilibre dans les modalités de la variable d’intéret. La classification non équilibrée pose des problèmes à de nombreux algorithmes d’apprentissage.Dans un soucis d’éfficacité dans l’estimation de notre modèle, il convient tout d’abord de procéder à un reéquilibrage des donnnées.

2) Fonction SMOTE de R et réequilibrage des données

La fonction SMOTE du package “DMwR” de R permet de gérer les problèmes de classification non équilibrée. L’idée générale de cette méthode est de générer artificiellement de nouveaux exemples de la classe minoritaire en utilisant les voisins les plus proches et à sous-échantillonner la classe majoritaire pour aboutir à un jeu de données plus équilibré.

Les arguments de la fonction SMOTE

Perc.over : controle la quantité du sur-échantillonnage de la classe minoritaire.
Perc.under : controle la quantité du sous-échantillonnage de la classe majoritaire.
k : Nombre indiquant le nombre de voisins les plus proches utilisés pour générer les nouveaux exemples de la classe minoritaire.

Pour plus de détails sur la fonction SMOTE de R, cliquez ici

Nous créons ainsi une nouvelle base de données contenant 4428 lignes qui nous servira pour la modélisation. Cette nouvelle base admet la répartition suivante pour la variable d’intérêt “Class” :


        0         1 
0.6666667 0.3333333 

II) Implémentation des SVM sur la base de données

Les SVM (Machines à Vecteur de Support, ou encore séparateurs à vaste marge) sont des techniques d’apprentissage supervisé qui s’inscrivent dans le cadre de la résolution de problèmes d’apprentissage. Ces méthodes reposent sur deux notions clés : les notions de marge maximale et de fonction de noyau (kernel).
Selon que l’on soit en présence d’un échantillon linéairement séparable ( moins probable, mais utile pour expliquer de façon simple le fonctionnement des SVM ) soit non linéairement séparable, le principe fondamentale des SVM consiste à partir d’un jeu d’entré X, à trouver une frontière séparatrice sur l’échantillon d’apprentissage qui discrmine entre les classes de la variable d’intéret Y.

1) Principe du SVM

Cas d’un échantillon linéairement séparable

Dans le cas des échantillons linéairement séparables,l’algorithme des SVM consiste à déterminer sur l’échantillon d’apprentissage la frontière de séparation optimale. Celle-ci est obtenue par un programme de maximisation la marge. La marge désigne la distance entre la frontière (hyperplan) de séparation et les observations les plus proches. Ces derniers sont appelés vecteurs supports.

Cas d’un échantillon non linéairement séparable

Dans le cas où les données ne sont pas linéairement séparables, la deuxième idée clé des SVM est de transformer l’espace de représentation des données d’entrée en un espace de plus grande dimension en utilisant une fonction noyau (Kernel) qui ne nécessite pas la connaissance explicite de la transformation à appliquer pour le changement d’espace. La séparation parfaite dans ce cas de figure paraît comme une vue de l’esprit. En pratique, il arrive que des individus soient du mauvais côté de la frontière. On introduit ainsi des variables de relaxation des contraintes de classification appelées variables “ressort”. On admet donc qu’il peut y avoir des erreurs dans notre modèle, qu’il convient donc de contrôler. On introduit alors un paramètre de pénalisation C des erreurs qui contrôle par ailleurs les risques de sur-apprentissage ou de sous-appprentissage.

1) Algorithme d’implémentation des SVM

1ère étape: Sélection de la fonction Kernel sur l’échantillon d’apprentissage. Quelques kernels usuels :
- Linéaire : \(u'v\)
- Polynomial : \((\gamma u'v+coef0)^{degree}\)
- Radial : \(exp(-\gamma|u-v|^2)\)
- Sigmoïde : \(tanh(\gamma u' v + coef0)\)
\(\gamma, degree, coef0\) désignant les hyperparamètres selon la fonction noyau choisit.

2ème étape : Sélection du paramètre de pénalisation C sur l’échantillon d’apptentissage

3ème étape : Mesure de la performance prédictive sur l’échantillon test

Remarque : Dans la pratique, les performances du SVM sont très sensibles au choix des hyper-paramètres des fonctions noyaux et du paramètre de pénalisation. Ainsi, une étape intermédiaire consiste à trouver les valeurs optimales de ces paramètres avant d’étudier la performance du modèle. Une solution consiste à déterminer ces hyper-paramètres par validation croisée sur l’échantillon d’apprentissage.

2) Cas pratique : application des SVM au cas de la détection de fraude sur les cartes de crédit

Cas échantillon linéairement/non linéairement séparable

Nous réalisons une représentation de quelques variables explicatives en fonction des modalités de la variable d’intérêt “Class” de la base pour avoir une idée du cas d’échantillon auquel nous sommes confronté.

Nous avons donc affaire à un échantillon non linéairement séparable.

Echantillon d’apprentissage / échantillon test

Nous choisissons d’utiliser 70% des observations de l’écantillon initial comme échantillon d’apprentissage (newdata.train) et les 30% restants comme notre échantillon test (newdata.test).

Sélection des hyper-paramètres optimaux

La fonction tune(svm…) du package “e1071” de R nous donne la possiblité de déterminer automatiquement par validation croisée la fonction kernel et les valeurs des hyper-paramètres optimaux associés de façon automatique.
Ici nous faisons une validation croisée 10-Fold avec différentes valeurs des hyper-paramètres sur l’échantillon d’apprentissage. La syntaxe est la suivante :

obj <- tune(svm, Class ~ ., data = newdata.train, ranges = 
       list(kernel=c('linear','polynomial','radial', 'sigmoid'),
       cost =c(0.1,0.5,1.0,2.0,10),gamma=c(0.01,0.1,0.5,1,2)), 
       tunecontrol = tune.control(sampling="cross"))

Nous obtenons le résultat suivant :
Résultat du tune(svm…)

Le taux d’erreur minimal sur l’échantillon d’apprentissage est obtenu en utilisant un kernel radial, pour une valeur optimale de l’hyper-paramètre \(\gamma\) égale à 0.1 et à 10 pour le paramètre de pénalisation C.

Evaluation du meilleur modèle sur l’échantillon d’apprentissage

Nous réalisons un modèle SVM sur l’échantillon d’apprentissage

svm.rad.best <- svm(Class ~.,data=newdata,subset=train,kernel="radial",probability=T,gamma=0.1,cost=10)
summary(svm.rad.best)

Call:
svm(formula = Class ~ ., data = newdata, kernel = "radial", probability = T, 
    gamma = 0.1, cost = 10, subset = train)


Parameters:
   SVM-Type:  C-classification 
 SVM-Kernel:  radial 
       cost:  10 

Number of Support Vectors:  663

 ( 355 308 )


Number of Classes:  2 

Levels: 
 0 1

Performance prédictive du meilleur modèle sur l’échantillon test

matrice de confusion

             newdata.class
pred.rad.best   0   1
            0 883  13
            1  10 422

taux d’erreur

[1] 0.01731928

Courbe ROC

AUC

[[1]]
[1] 0.9919914

Indice de Gini

[1] 0.9839827

3) Comparaison des performances du meilleur modèle à d’autres kernels et benchmarks

Courbe ROC

Conclusion

Les SVM, méthodes d’apprentissage supervisé peuvent se montrer très utiles pour plusieurs raisons, à savoir leur :
• Capacité à traiter de grandes dimensionnalités
• Traitement des problèmes non linéaires avec le choix des noyaux
• Robustesse par rapport aux points aberrants (contrôlée avec le paramètre C)
• Robustesse par rapport aux problèmes de multicolinéarité Cependant, cette technique presénte également quelques inconvénients, qui sont :
• La difficulté à identifier les bonnes valeurs des paramètres (et sensibilité aux paramètres)
• Le problème lié au cas d’échantillon déséquilibré
• La difficulté d’interprétations (exemple : pertinence des variables)

Nous avons construit un démonstrateur en ligne avec R shiny qui vous permettra de vous rendre compte par vous même de la facilité d’emploi des SVM, de visualiser ses performances en jouant sur le choix des kernels et des hyper-paramètres dans le cadre de la détection de fraude sur les cartes de crédit. Ce démonstrateur vous permettra par aillleurs de Comparez les performances des SVM à celle de la régression logistique.

Télécharger ce document